When network management applications are implemented in software, a considerable amount of the device attribute information is typically defined within the source code for each device being managed. When changes are required for a particular device, the source code must be searched, modified, compiled, linked and tested. This process can be time consuming and error prone since a developer must first locate the device attribute information for a device (which may be scattered throughout several thousand lines of source code), make the changes, rebuild the application from sources and then regression test the final product.
Device management applications are typically implemented by describing and manipulating device attributes within the source code for that application. An example of this might be the number of ports of a device or a string representing the name of a module on that device. The technique of hard coding the attributes of a device suffices for small applications that support a small number of devices but it does not scale well for large applications that support many devices and may support many more devices in the future. It also does not scale well as new features are added to a device or firmware. A network management application can grow to be tens of thousands of lines of software. This becomes costly from a maintenance point of view and proves to be time consuming when modifications must be made to a device attribute list or new devices to be managed are added to the system.
It is quite often that string literals are placed within source code. A change to a string literal requires one or more changes to the source code which can be quite tedious for very large applications whose source code is distributed in many libraries. The entire source code control system would have to be scoured for the offending string and the appropriate changes made to correct the application behavior. Furthermore, device attributes such as port count, slot count, software revision functionality is typically hard coded into sources which further increases the maintenance of a software system. In addition to maintenance, the development process is also affected since the application requires building object code, linking and testing the executable.